// {
//   let a = 10;
//   var b = 1;
// }
// console.log(b) // 1

// console.log(a) // ReferenceError: a is not defined.

// let obj = {
//   name: '刘德华',
//   getName: function(name) {
//     return this.name + name
//   }
// }
// let str = `我叫${obj.name}`
// let str1 = `我的名字是${obj.getName(11)}`
// console.log(str, str1)

// function log(...arg) {
//   console.log('arguments:',arguments)
//   let [a,b,c] = arguments
//   console.log(a,b,c)
//   console.log(arg)
// }
// log(1)//[1]
// log(1,2,3)//[1,2,3]

// let obj = {
//   get(target, key, receiver) {
//     console.log(222,target, key);
//     return Reflect.get(target, key, receiver)
//   },
//   set(target, key, value, receiver) {
//     console.log(111,target,key,value)
//     target[key] = value
//     return target
//   }
// }
// let result = new Proxy({name:'刘德华'},obj)
// console.log(result.name)
// result.age = 20
// console.log(result)

// let obj = { foo: 123 }; __proto__
// function func () {
//   this.foo = 123
// }
// func.prototype.getName = () => {
//   console.log(111)
// }
//   // Object.getOwnPropertyDescriptor(obj, 'foo')
//   Object.getOwnPropertyDescriptor(func, 'getName') //???获取不到

// function student(obj) {

//   let name = '123'
//   obj.name = name

//   //简单的举例说明一下垃圾回收机制内部对变量的描述
//   // let obj = {
//   //   key: 'name',
//   //   num: 1+1
//   // }
//   let obj2 = WeakMap({
//     obj: obj1
//   })
//   let obj1 = [
//     obj2
//   ]
  
//   if(obj.name) {
//     this.name = obj.name
//   }
//   this.name = obj?.name
// }

    // student.getStudent = () => {
    //   console.log(1)
    // }//静态方法
    // //只能是new一个实例出来之后才能访问的方法
    // student.prototype.getStudent1= () => {
    //   console.log(2)
    // }//实例方法


    // student.getStudent()
    // let s = new student()
    // s.getStudent1()
    // student.getStudent1()

    // let handlerObj = {
    //   get(target, key, receiver) {
    //     return target[key]
    //   },
    //   set(target, key, value, receiver) {
    //     // target[key] = value
    //     // return target
    //     return Reflect.set(target, key, value, receiver)
    //   }
    // }
    // let proxyObj = new Proxy({name: '刘德华'}, handlerObj)
    // // console.log(proxyObj.name)
    // proxyObj.age = 20
    // console.log(proxyObj)
    // let set = new Set([1,2,3,2,3,2,3])
    // set.forEach(item => {
    //   console.log(item)
    // })
    // const map = new Map([
    //   ['F', 'no', '123'],
    //   ['T',  'yes'],
    // ]);
    // const map1 = new Map()
    // map1.set('F', 'no').set('T', 'yes')
    // console.log(map.entries())
    // console.log(map1)

    // const p1 = new Promise((resolve, reject) => {
    //   setTimeout(() => {
    //     resolve(1)
    //   }, 1000)
    // })
    // const p2 = new Promise((resolve, reject) => {
    //   setTimeout(() => {
    //     resolve(5)
    //   }, 5000)
    // })
    // const result = Promise.race([p1, p2]).then(res => {
    //   console.log(res)
    // })

    // class Person {
    //   age = 20;
    //   constructor() {
    //     this.name = '刘德华'
    //   }
    //   getName() {
    //     return this.name
    //   }
    //   getAge() {
    //     return this.age
    //   }
    // }
    // class Student extends Person {
    //   grade = 5
    // }
    // class Teacher extends Person {
    //   grade = 5
    // }
    // let s1 = new Student()

    // console.log(s1)
    // console.log(Student.getAge())
    // function Student() {
    //   this.name = '刘德华'
    // }
    // let s1 = new Student()
    // console.log(Student.prototype.constructor)
    // s1.constructor = {}
    // console.log(s1.constructor === Student)
    function Per() {

    }
    let obj = new Person()
    Per.prototype = obj
    //等同于
    // Per.prototype.name = '23'
    // Per.prototype.sum = function() {}
    let p1 = new Per()
    console.log(p1.name, p1.sum())

